package com.sparkseries.dao;

import com.sparkseries.domain.SysMenu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 菜单管理
 */
@Mapper
public interface SysMenuMapper {
    /**
     * 创建菜单
     * @param menu 菜单类
     * @return Integer
     */
    Integer createMenu(SysMenu menu);

    /**
     * 绑定菜单角色
     * @param roleIds 角色ID集合
     * @param menuId 菜单ID
     * @return Integer
     */
    Integer bindMenuWithRole(@Param("roleIds") List<Long> roleIds, @Param("menuId") Long menuId);

    /**
     * 删除菜单
     * @param menuId 菜单ID
     * @return Integer
     */
    Integer deleteMenu(@Param("menuId") Long menuId);

    /**
     * 删除菜单角色绑定
     * @param roleIds 角色ID集合
     * @param menuId 菜单ID
     * @return Integer
     */
    Integer deleteBind(@Param("roleIds") List<Long> roleIds, @Param("menuId") Long menuId);

    /**
     * 删除菜单时清空菜单角色绑定
     * @param menuId 菜单ID
     * @return Integer
     */
    Integer deleteMenuBind(@Param("menuId") Long menuId);

    /**
     * 删除角色时清空菜单角色绑定
     * @param roleId 角色ID
     * @return Integer
     */
    Integer deleteRoleBind(@Param("roleId") Long roleId);

    /**
     * 修改菜单
     * @param menu 菜单类
     * @return Integer
     */
    Integer updateMenu(SysMenu menu);

    /**
     * 修改菜单状态
     * @param menuId 菜单ID
     * @param status 是否启用（0-禁用，1-启用）
     * @return Integer
     */
    Integer updateMenuStatus(@Param("menuId") Long menuId, @Param("status") Integer status);

    /**
     * 获取菜单列表
     * @param menu 菜单类
     * @return 菜单类集合
     */
    List<SysMenu> listMenu(SysMenu menu);

    /**
     * 通过菜单ID获取菜单信息
     * @param menuId 菜单ID
     * @return 菜单类
     */
    SysMenu getMenuById(@Param("menuId") Long menuId);

    /**
     * 获取菜单下的角色
     * @param menuId 菜单ID
     * @return 角色ID集合
     */
    List<Long> listRoleIdsByMenuId(@Param("menuId") Long menuId);
}